/**
 * 获取属性
 * @type {Object}
 */
var myObj = {
	a: 2
};

var obj = Object.getOwnPropertyDescriptor(myObj, 'a');
console.log(obj); // { value: 2, writable: true, enumerable: true, configurable: true }


/**
 * 设置属性
 */
var myObj1 = {};
Object.defineProperty(myObj1, 'a', {
	value: 3,
	writable: true,
	configurable: true,
	enumerable: true
});

console.log(myObj1.a); // 3


/**
 * 禁止扩展
 * 如果你想禁止一个对象添加行的属性并且保留已有属性
 */
var myObj2 = {
	a: 4
};
Object.preventExtensions(myObj2);
myObj2.b = 3;
console.log(myObj2.b); // undefined  严格模式下会报错


/**
 * 判断对象属性是否可以枚举
 */
var myObj3 = {};
Object.defineProperty(myObj3, 'a', {
	enumerable: true,
	value: 2
});
Object.defineProperty(myObj3, 'b', {
	enumerable: false,
	value: 2
});

console.log(myObj3.propertyIsEnumerable('a')); // true
console.log(myObj3.propertyIsEnumerable('b')); // true
console.log(Object.keys(myObj3)); // ["a"]
console.log(Object.getOwnPropertyNames(myObj3)); // ["a", "b"]